---
title: 构建 Netty 服务器
---
当使用Netty构建服务器时，采用主从线程组模型是一种常见且高效的方式。该模型将服务器的工作分为两个主要部分：主线程组负责接受客户端的连接请求，从线程组负责处理客户端的业务请求。



## 1. 准备环境

确保已经安装好Java开发环境，并且准备好Netty库。

## 2. 创建 Maven 项目

创建一个Maven项目并添加Netty依赖。

```xml
<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.69.Final</version> <!-- 使用最新版本 -->
</dependency>
```

## 3. 编写代码

### 3.1. 创建主从线程组

```java
EventLoopGroup bossGroup = new NioEventLoopGroup(); // 主线程组
EventLoopGroup workerGroup = new NioEventLoopGroup(); // 从线程组
```

### 3.2. 配置 ServerBootstrap

```java
ServerBootstrap serverBootstrap = new ServerBootstrap();
serverBootstrap.group(bossGroup, workerGroup)
               .channel(NioServerSocketChannel.class)
               .childHandler(new ChannelInitializer<SocketChannel>() {
                   @Override
                   protected void initChannel(SocketChannel ch) {
                       ch.pipeline().addLast(new YourChannelHandler()); // 添加自定义ChannelHandler
                   }
               });
```

### 3.3. 启动服务器

```java
try {
    ChannelFuture future = serverBootstrap.bind(port).sync();
    future.channel().closeFuture().sync();
} catch (InterruptedException e) {
    // 处理异常
} finally {
    bossGroup.shutdownGracefully();
    workerGroup.shutdownGracefully();
}
```

## 4. 自定义 ChannelHandler

编写自定义的ChannelHandler来处理客户端的业务请求。

```java
public class YourChannelHandler extends ChannelInboundHandlerAdapter {
    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) {
        // 处理接收到的消息
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
        // 处理异常
        ctx.close();
    }
}
```

## 5. 完善业务逻辑

在 `YourChannelHandler` 中完善业务逻辑，根据具体需求处理客户端的请求和响应。

## 6. 运行

运行项目，服务器将启动并监听指定端口，可以通过客户端进行连接和交互。

---

这个教程简洁地展示了如何使用Netty构建服务器，采用主从线程组模型来处理客户端的请求。你可以根据自己的需求进一步完善和扩展代码。
